// 扩展BOM表单功能
frappe.ui.form.on('BOM', {
    refresh: function(frm) {
        // 在刷新表单时添加自定义逻辑
    },
    
    // 当表头物料变化时，可能需要清空或重新计算某些字段
    item: function(frm) {
        // 物料变化时的逻辑
    },
    
    // 当表头数量变化时，更新所有工序的委外单价
    quantity: function(frm) {
        if (frm.doc.operations && frm.doc.operations.length > 0) {
            frm.doc.operations.forEach(function(row) {
                if (row.operation && row.custom_supplier) {
                    update_subcontracting_price(frm, row);
                }
            });
        }
    }
});

// 扩展BOM Operation子表功能
frappe.ui.form.on('BOM Operation', {
    // 当工序变化时
    operation: function(frm, cdt, cdn) {
        let row = locals[cdt][cdn];
        update_subcontracting_price(frm, row);
    },
    
    // 当供应商变化时
    custom_supplier: function(frm, cdt, cdn) {
        let row = locals[cdt][cdn];
        update_subcontracting_price(frm, row);
    },
    
    // 添加新的处理函数：当含税单价变化时
    custom_service_price_with_tax: function(frm, cdt, cdn) {
        let row = locals[cdt][cdn];
        if (row.custom_service_price_with_tax && row.custom_tax_rate) {
            // 计算不含税单价 = 含税单价 / (1 + 税率/100)
            let tax_rate = row.custom_tax_rate / 100;
            let price_without_tax = flt(row.custom_service_price_with_tax / (1 + tax_rate));
            
            // 检查新值是否与当前值相同（避免循环触发）
            if (Math.abs(flt(row.custom_service_price - price_without_tax)) > 0.001) {
                // 设置标志，表示这是由含税单价触发的更新
                row._updating_from_tax_price = true;
                
                // 更新不含税单价字段
                frappe.model.set_value(cdt, cdn, 'custom_service_price', price_without_tax);
                
                // 清除标志
                setTimeout(() => {
                    row._updating_from_tax_price = false;
                }, 0);
            }
        }
    },
    
    // 当税率变化时
    custom_tax_rate: function(frm, cdt, cdn) {
        let row = locals[cdt][cdn];
        if (row.custom_service_price_with_tax && row.custom_tax_rate) {
            // 计算不含税单价 = 含税单价 / (1 + 税率/100)
            let tax_rate = row.custom_tax_rate / 100;
            let price_without_tax = flt(row.custom_service_price_with_tax / (1 + tax_rate));
            
            // 检查新值是否与当前值相同（避免循环触发）
            if (Math.abs(flt(row.custom_service_price - price_without_tax)) > 0.001) {
                // 更新不含税单价字段
                frappe.model.set_value(cdt, cdn, 'custom_service_price', price_without_tax);
            }
        }
    },
    
    // 当不含税单价变化时，更新含税单价
    custom_service_price: function(frm, cdt, cdn) {
        let row = locals[cdt][cdn];
        
        // 如果这是由含税单价触发的更新，不要再触发回去
        if (row._updating_from_tax_price) {
            return;
        }
        
        if (row.custom_service_price && row.custom_tax_rate) {
            // 计算含税单价 = 不含税单价 * (1 + 税率/100)
            let tax_rate = row.custom_tax_rate / 100;
            let price_with_tax = flt(row.custom_service_price * (1 + tax_rate));
            
            // 检查新值是否与当前值相同（避免循环触发）
            if (Math.abs(flt(row.custom_service_price_with_tax - price_with_tax)) > 0.001) {
                // 更新含税单价字段
                frappe.model.set_value(cdt, cdn, 'custom_service_price_with_tax', price_with_tax);
            }
        }
    }
});

// 更新委外单价的函数
function update_subcontracting_price(frm, row) {
    // 检查必要字段是否已填写
    if (!frm.doc.company || !frm.doc.item || !row.operation || !row.custom_supplier || !frm.doc.quantity) {
        return;
    }
    
    // 调用后端方法获取委外单价
    frappe.call({
        method: "light_mes.light_mes.doctype.subcontracting_service_price.subcontracting_service_price.get_subcontracting_price",
        args: {
            company: frm.doc.company,
            supplier: row.custom_supplier,
            qty: frm.doc.quantity, // 使用表头的数量
            item_code: frm.doc.item,
            operation: row.operation,
            // 使用当前日期
            price_date: frappe.datetime.get_today()
        },
        callback: function(r) {
            if (r.message !== undefined) {
                // 更新单价字段
                frappe.model.set_value(row.doctype, row.name, 'custom_service_price', r.message);
                
                // 如果价格为0，显示提示
                if (r.message === 0) {
                    frappe.show_alert({
                        message: __('No subcontracting price found for the selected item, operation and supplier.'),
                        indicator: 'orange'
                    });
                }
                
                // 如果有税率，同时更新含税单价
                if (row.custom_tax_rate) {
                    let tax_rate = flt(row.custom_tax_rate) / 100;
                    let price_with_tax = flt(r.message * (1 + tax_rate));
                    frappe.model.set_value(row.doctype, row.name, 'custom_service_price_with_tax', price_with_tax);
                }
            }
        }
    });
} 